//package com.hzw.icane.bluetooth.impBle;
//
//import android.bluetooth.BluetoothAdapter;
//import android.bluetooth.BluetoothDevice;
//import android.bluetooth.BluetoothGatt;
//import android.bluetooth.BluetoothGattCharacteristic;
//import android.bluetooth.BluetoothGattDescriptor;
//import android.bluetooth.BluetoothProfile;
//import android.bluetooth.BluetoothSocket;
//import android.content.ComponentName;
//import android.content.Context;
//import android.content.Intent;
//import android.content.ServiceConnection;
//import android.os.AsyncTask;
//import android.os.IBinder;
//import android.os.Message;
//import android.text.TextUtils;
//import android.util.Log;
//import android.widget.Toast;
//
//import com.hzw.icane.bluetooth.BluetoothApi;
//import com.hzw.icane.bluetooth.bean.BleDevice;
//import com.hzw.icane.bluetooth.ibluetooth.IAutoBlelimit;
//import com.hzw.icane.bluetooth.ibluetooth.IBleFunction;
//import com.hzw.icane.bluetooth.ibluetooth.IHandler;
//import com.hzw.icane.utils.ClsUtils;
//import com.hzw.icane.utils.HexStringUtil;
//import com.hzw.icane.utils.LogUtil;
//import com.junkchen.blelib.BleService;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.UUID;
//
///**
// * Created by 82218 on 2017/7/12.
// */
//
//public class DefaultBleManager implements IBleFunction {
//
//    private static final String TAG = DefaultBleManager.class.getSimpleName();
//
//    /**
//     * 内部类实现单例模式
//     * 延迟加载，减少内存开销
//     *
//     * @author xuzhaohu
//     */
//    private static class SingletonHolder {
//        private static DefaultBleManager instance = new DefaultBleManager();
//    }
//
//    public static DefaultBleManager getInstance() {
//        return SingletonHolder.instance;
//    }
//
//    public DefaultBleManager() {
//        mHandler = new BleHandler();
//        deviceList = new ArrayList<BleDevice>();
//        disConnList = new ArrayList<BleDevice>();
//    }
//
//    private Context mApplicationContext;
//    private BluetoothAdapter bluetoothAdapter;
//    private IAutoBlelimit autoLimit;
//
//    private String mConnRssi;//当前连接设备信号
//    private String connDeviceName;//当前连接设备名称
//    private String connDeviceAddress;//当前连接设备地址
//    private List<BleDevice> deviceList;//设备列表
//    private List<BleDevice> disConnList;//断开连接的列表
//
//    private BleHandler mHandler;
//
//    private ServiceConnection serviceConnection;
//
//    private BleReceiver bleReceiver;
//
//    public List<BleDevice> getDeviceList() {
//        return deviceList;
//    }
//
//    @Override
//    public void initBle(Context application) {
//        if (bluetoothAdapter != null) {
//            closeBle();
//        }
//        mApplicationContext = application.getApplicationContext();
//
//        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
//    }
//
//    @Override
//    public void setAutoConnBle(IAutoBlelimit blelimit) {
//        this.autoLimit = blelimit;
//    }
//
//    @Override
//    public void openBle() {
//        if (bluetoothAdapter == null) {
//            Toast.makeText(mApplicationContext, "not support Bluetooth", Toast.LENGTH_SHORT).show();
//            return;
//        }
//        LogUtil.i("@hzy", "openBle----------" + deviceList.size());
//        if (bluetoothAdapter.enable()) {
//            LogUtil.i("@hzy", "openBle----------open");
//            mHandler.sendEmptyMessage(SERVICE_OPEN);
//        }
//    }
//
//    @Override
//    public void scanBle() {
//        if (bluetoothAdapter == null) {
//            return;
//        }
//        LogUtil.i("@hzy", "scanBle----------" + deviceList.size());
//        //监听扫描设备
//        setBleReceiver();
//        //清空设备表然后进行扫描
//        deviceList.clear();
//        disConnList.clear();
//        bluetoothAdapter.startDiscovery();
//    }
//
//    private void setBleReceiver() {
//        if (bleReceiver == null)
//            bleReceiver = new BleReceiver(mHandler);
//        mApplicationContext.registerReceiver(bleReceiver, BleReceiver.makeIntentFilter());
//    }
//
//    public void addBleDevice(BleDevice device) {
//        if (bluetoothAdapter == null) {
//            return;
//        }
//        boolean isAdd = true;
//        for (BleDevice bleDevice : deviceList) {
//            if (bleDevice.deviceAddress.equals(device.deviceAddress)) {
//                isAdd = false;
//            }
//        }
//        if (isAdd) {
//            deviceList.add(device);
//        }
//
//    }
//
//    @Override
//    public void stopScanBle() {
//
//    }
//
//    @Override
//    public void connetBle(String address) {
//        if (bluetoothAdapter == null) {
//            return;
//        }
//        if (TextUtils.isEmpty(address)) {
//            return;
//        }
//
//        BleDevice bleDevice = getBleDevice(address);
//        try {
//            //通过工具类ClsUtils,调用createBond方法
//            ClsUtils.createBond(bleDevice.device.getClass(), bleDevice.device);
//            connDeviceAddress = bleDevice.deviceAddress;
//            //创建连接
//            new ConnectTask().execute(address);
//        } catch (Exception e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
//    }
//
//    private BleDevice getBleDevice(String address){
//        BleDevice bleDevice = null;
//        for (BleDevice device : deviceList) {
//            if (TextUtils.equals(device.deviceAddress, address)){
//                bleDevice = device;
//            }
//        }
//        return bleDevice;
//    }
//
//    @Override
//    public void setPin(Class btClass, BluetoothDevice btDevice, String str) {
//        try {
//            ClsUtils.setPairingConfirmation(btDevice.getClass(), btDevice, true);
//            ClsUtils.setPin(btClass, btDevice, str);
//            ClsUtils.cancelPairingUserInput(btClass, btDevice);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    public void setPin(String str) {
//        if (bluetoothAdapter == null) {
//            return;
//        }
//        BluetoothDevice device = getBleDevice(connDeviceAddress).device;
//        if (device != null) {
////            device.setPin(ClsUtils.convertPinToBytes("123456"));
////            device.setPairingConfirmation(true);
//            setPin(BluetoothDevice.class, device, str);
//        }
//    }
//
//
//    @Override
//    public void disConnetBle() {
//        if (bluetoothAdapter == null) {
//            return;
//        }
//        getBleDevice(connDeviceAddress).device.g;
//    }
//
//    @Override
//    public void autoConnetBle() {
//        if (autoLimit == null || !autoLimit.isNeedAutoConnect()) {
//            return;
//        }
//        if (bluetoothAdapter == null) {
//            return;
//        }
//        if (deviceList.size() == 0) {
//            closeBle();
//            return;
//        }
//        LogUtil.i("@hzy", "autoConnetBle----------" + deviceList.size());
//        for (BleDevice device : deviceList) {
//            if (!disConnList.contains(device)) {
//                LogUtil.i("@hzy", "autoConnetBle----------" + device.deviceAddress);
//                connetBle(device.deviceAddress);
//            }
//        }
//    }
//
//    @Override
//    public void setCharacteristic(BluetoothGattCharacteristic characteristic) {
//        if (bluetoothAdapter == null) {
//            return;
//        }
//    }
//
//    @Override
//    public void writeBle(String serviceUUID, String characteristicUUID, byte[] value) {
//        if (bleService == null) {
//            return;
//        }
//        new SendInfoTask().execute(value);
//    }
//
//    @Override
//    public void closeBle() {
//        closeBleReceiver();
//
//        //解绑服务
//        mApplicationContext.unbindService(serviceConnection);
//        serviceConnection = null;
//
//        if (autoLimit != null && autoLimit.isNeedAutoConnect())
//            initBle(mApplicationContext);
//    }
//
//    private void closeBleReceiver() {
//        mApplicationContext.unregisterReceiver(bleReceiver);
//        bleReceiver = null;
//        //解除监听
//    }
//
//    @Override
//    public void register(IHandler i) {
//        mHandler.register(i);
//    }
//
//    @Override
//    public void unRegister(IHandler i) {
//        mHandler.unRegister(i);
//    }
//
//    //连接蓝牙设备的异步任务
//    class ConnectTask extends AsyncTask<String,String,String>
//    {
//
//
//        @Override
//        protected String doInBackground(String... params) {
//            // TODO Auto-generated method stub
//            BluetoothDevice device = bluetoothAdapter.getRemoteDevice(params[0]);
//
//            try {
//
//                btSocket = device.createRfcommSocketToServiceRecord(UUID.fromString(autoLimit.getServiceFeatures()));
//
//                btSocket.connect();
//
//                Log.e("error", "ON RESUME: BT connection established, data transfer link open.");
//
//            } catch (IOException e) {
//
//                try {
//                    btSocket.close();
//                    return "Socket 创建失败";
//
//                } catch (IOException e2) {
//
//                    Log .e("error","ON RESUME: Unable to close socket during connection failure", e2);
//                    return "Socket 关闭失败";
//                }
//
//            }
//            //取消搜索
//            bluetoothAdapter.cancelDiscovery();
//
//            try {
//                outStream = btSocket.getOutputStream();
//
//                // inStream = btSocket.getInputStream();
//
//            } catch (IOException e) {
//                Log.e("error", "ON RESUME: Output stream creation failed.", e);
//                return "Socket 流创建失败";
//            }
//
//
//            return "蓝牙连接正常,Socket 创建成功";
//        }
//
//        @Override    //这个方法是在主线程中运行的，所以可以更新界面
//        protected void onPostExecute(String result) {
//            // TODO Auto-generated method stub
//
//            //连接成功则启动监听
//            rThread=new ReceiveThread();
//
//            rThread.start();
//
//            super.onPostExecute(result);
//        }
//
//
//
//    }
//
//    //发送数据到蓝牙设备的异步任务
//    class SendInfoTask extends AsyncTask<byte[],String,String>
//    {
//
//        @Override
//        protected void onPostExecute(String result) {
//            // TODO Auto-generated method stub
//            super.onPostExecute(result);
//
//        }
//
//        @Override
//        protected String doInBackground(byte[]... arg0) {
//            // TODO Auto-generated method stub
//
//            if(btSocket==null)
//            {
//                return "还没有创建连接";
//            }
//
//            if(arg0[0].length>0)//不是空白串
//            {
//                //String target=arg0[0];
//
//                byte[] msgBuffer = arg0[0];
//
//                try {
//                    //  将msgBuffer中的数据写到outStream对象中
//                    outStream.write(msgBuffer);
//
//                } catch (IOException e) {
//                    Log.e("error", "ON RESUME: Exception during write.", e);
//                    return "发送成功";
//                }
//            }
//
//            return "发送成功";
//        }
//
//    }
//
//
//    //从蓝牙接收信息的线程
//    class ReceiveThread extends Thread
//    {
//
//        String buffer="";
//
//        @Override
//        public void run() {
//
//            while(btSocket!=null )
//            {
//                //定义一个存储空间buff
//                byte[] buff=new byte[1024];
//                try {
//                    inStream = btSocket.getInputStream();
//                    System.out.println("waitting for instream");
//                    inStream.read(buff); //读取数据存储在buff数组中
////                        System.out.println("buff receive :"+buff.length);
//
//                    // ReceiveData = new String(buff,0,inStream.available());
//                    //ReceiveData = new String(buff,"ASCII");
//
//                    processBuffer(buff,1024);
//
//                    //System.out.println("receive content:"+ReceiveData);
//                } catch (IOException e) {
//
//                    e.printStackTrace();
//                }
//            }
//        }
//
//        private void processBuffer(byte[] buff,int size)
//        {
//            int length=0;
//            for(int i=0;i<size;i++)
//            {
////				if(buff[i]>'\0')
//                if(buff[i]>'\0')
//                {
//                    length++;
//                }
//                else
//                {
//                    break;
//                }
//            }
//
//
//            byte[] newbuff=new byte[length];  //newbuff字节数组，用于存放真正接收到的数据
//
//            for(int j=0;j<length;j++)
//            {
//                newbuff[j]=buff[j];
//            }
//
//            ReceiveData=ReceiveData+new String(newbuff);
////			ReceiveData=new String(newbuff);
//            Log.e("Data",ReceiveData);
//			System.out.println("result :"+ReceiveData);
//
//
//        }
//
//    }
//    private BluetoothAdapter mBluetoothAdapter = null;
//
//    private BluetoothSocket btSocket = null;
//
//    private OutputStream outStream = null;
//
//    private InputStream inStream = null;
//
//    //这条是蓝牙串口通用的UUID，不要更改
//    private static final UUID MY_UUID =
//            UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
//
//    private static String address = "20:16:07:26:18:46"; // <==要连接的目标蓝牙设备MAC地址
//
//
//    private ReceiveThread rThread=null;  //数据接收线程
//    //接收到的字符串
//    String ReceiveData="";
//}
